using System;
using System.IO;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Profile;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using ClickSocial.Framework;
using ClickSocial.Components;
using ClickSocial.Entities;
using ClickSocial.DataSourceControls;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ClickSocial
{
    public partial class VerCarrito : CDefault
    {
        private double _total = 0;

        public double Total
        {
            get 
            {
                return _total;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            BindData();

            if (!User.Identity.IsAuthenticated)
            {
                lblMensaje.Visible = true;

                lblMensaje.Text = "Debe ser usuario registrado para realizar la compra o pedido de imagenes a los fotografos.";
            }
        }

        public void BindData()
        {
            List<CartItemExtend> items_compra = new List<CartItemExtend>();
            List<CartItemExtend> items_pedido = new List<CartItemExtend>();

            if (Session["Carrito"] != null)
            {
                Cart carrito = Session["Carrito"] as Cart;
                _total = 0;

                foreach (CartItem item in carrito.CartItems)
                {
                    if (item.TipoCart == 0)
                    {
                        items_pedido.Add(new CartItemExtend(item.EventoID, item.Archivo, item.Precio, item.TipoCart));
                    }
                    else
                    {
                        items_compra.Add(new CartItemExtend(item.EventoID, item.Archivo, item.Precio, item.TipoCart));
                        _total += item.Precio;
                    }
                        
                }
            }
            if (items_pedido.Count > 0)
                Session["items_pedido"] = items_pedido;

            if (items_compra.Count>0)
                Session["items_compra"] = items_compra;

            lnkbtnContinuarCompra.Visible = (!items_compra.Count.Equals(0) && User.Identity.IsAuthenticated);
            lnkbtnPedido.Visible = (!items_pedido.Count.Equals(0) && User.Identity.IsAuthenticated);
            rpCompras.Visible = (!items_compra.Count.Equals(0) && User.Identity.IsAuthenticated);
            MedioPago.Visible = (!items_compra.Count.Equals(0) && User.Identity.IsAuthenticated);
            rpPedidos.Visible = (!items_pedido.Count.Equals(0) && User.Identity.IsAuthenticated);

            rpCompras.DataSource = items_compra;
            rpCompras.DataBind();

            items_pedido.Sort();
            rpPedidos.DataSource = items_pedido;
            rpPedidos.DataBind();

            ((Site)Master).UpdateCarrito();
        }

        /// <summary>
        /// Elimina un item del carrito actual
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void lnkbtn_Click(object sender, CommandEventArgs e)
        {
            string args = e.CommandArgument as string;
            long eventoId = long.Parse(args.Split(':')[0]);
            string archivo = args.Split(':')[1];
            double precio = double.Parse(args.Split(':')[2]); 

            if (Session["Carrito"] != null)
            {
                Cart carrito = Session["Carrito"] as Cart;

                List<CartItem> items = new List<CartItem>();

                foreach (CartItem item in carrito.CartItems)
                {
                    if (item.Archivo != archivo || item.EventoID != eventoId || item.Precio != precio)
                    {
                        items.Add(item);
                    }
                }

                carrito.CartItems = items;
                
                Session["carrito"] = carrito;
            }

            BindData();
            
        }

        protected void lnkbtnPedido_Click(object sender, EventArgs e)
        {
            try
            {
                if (Session["items_pedido"] != null)
                {
                    if (!User.Identity.IsAuthenticated)
                    {
                        lblMensaje.Text = "Debe estar registrado para terminar la compra.";
                        return;
                    }

                    List<CartItemExtend> items_compra = Session["items_pedido"] as List<CartItemExtend>;
                    Cart carrito = Session["Carrito"] as Cart;

                    VentaInfo oVentaInfo = new VentaInfo();
                    oVentaInfo.Cliente = User.Identity.Name;
                    oVentaInfo.Monto = 0;
                    oVentaInfo.Fecha = DateTime.Now;
                    oVentaInfo.Estado = EstadoVenta.Pedido;
                    oVentaInfo.Cantidad = items_compra.Count;

                    oVentaInfo = Ventas.Insert(oVentaInfo);

                    StringBuilder sbPedidoCliente = new StringBuilder();
                    List<string> fotografos = new List<string>();
                    string fotografo_actual = string.Empty;

                    foreach (CartItemExtend item in items_compra)
                    {
                        if (fotografo_actual != item.UserFotografo)
                        {
                            fotografos.Add(item.UserFotografo);
                            fotografo_actual = item.UserFotografo;
                        }

                        //sbPedidoCliente.AppendFormat("({0}/{1}): {2}\r\n", item.NombreFotografo, item.NombreEvento, item.Archivo);
                        sbPedidoCliente.AppendFormat("<img alt='' src='{0}/GetImage.aspx?archivo={1}&eventoid={2}&fotografo={3}&w={4}&h={5}' style='border: none;' /></a> Evento:{6} Fotografo:{7}<br/>", ConfigurationManager.AppSettings["RootVirtualPath"], item.Archivo, item.EventoID, item.UserFotografo, 80, 60, item.NombreEvento, item.NombreFotografo);

                        VentaItemInfo oVentaItemInfo = new VentaItemInfo();
                        oVentaItemInfo.Nombre = item.Archivo;
                        oVentaItemInfo.Descripcion = string.Format("{0}/{1}", item.NombreFotografo, item.NombreEvento);
                        oVentaItemInfo.Precio = item.Precio;
                        oVentaItemInfo.VentaID = oVentaInfo.VentaID;
                        oVentaItemInfo.EventoID = item.EventoID;
                        oVentaItemInfo.Fotografo = item.UserFotografo;
                        VentaItem.Insert(oVentaItemInfo);

                        int idx = carrito.CartItems.FindIndex(delegate(CartItem i) { return (i.Archivo == item.Archivo && i.EventoID == item.EventoID && i.Precio == item.Precio && i.TipoCart==item.TipoCart); });
                        carrito.CartItems.RemoveAt(idx);

                    }

                    if (carrito.CartItems.Count == 0)
                        Session["Carrito"] = null;
                    Session["items_pedido"] = null;

                    StringBuilder sbDatosAdministradores = new StringBuilder();
                    StringBuilder sbDatosFotografos = new StringBuilder();
                    
                    foreach (string fotografo in fotografos)
                    {                        
                        MembershipUser u = Membership.GetUser(fotografo);
                        PerfilComun perfil = (PerfilComun)ProfileBase.Create(fotografo);
                        sbDatosFotografos.AppendFormat("Nombre y Apellido: {0} {1}<br/>", perfil.Nombre, perfil.Apellido);
                        sbDatosFotografos.AppendFormat("Telefono: {0}<br/>", perfil.Telefono);
                        sbDatosFotografos.AppendFormat("Mobile: {0}<br/>", perfil.Celular);
                        sbDatosFotografos.AppendFormat("E-mail: {0}<br/>", u.Email);
                        sbDatosFotografos.AppendFormat("Direccion: {0}<br/>", perfil.Direccion);
                        sbDatosFotografos.AppendFormat("Ciudad: {0}<br/>", perfil.Ciudad);
                        sbDatosFotografos.AppendFormat("Pcia.: {0}<br/>", perfil.Provincia);
                        sbDatosFotografos.AppendFormat("Pais: {0}<br/><br/>", perfil.Pais);
                    }

                    foreach(string userHost in Roles.GetUsersInRole(Global.RolesApp.Host))
                    {
                        MembershipUser u = Membership.GetUser(userHost);
                        PerfilComun perfil = (PerfilComun)ProfileBase.Create(userHost);
                        sbDatosAdministradores.AppendFormat("Nombre y Apellido: {0} {1}<br/>", perfil.Nombre, perfil.Apellido);
                        sbDatosAdministradores.AppendFormat("Telefono: {0}<br/>", perfil.Telefono);
                        sbDatosAdministradores.AppendFormat("Mobile: {0}<br/>", perfil.Celular);
                        sbDatosAdministradores.AppendFormat("E-mail: {0}<br/>", u.Email);
                        sbDatosAdministradores.AppendFormat("Direccion: {0}<br/>", perfil.Direccion);
                        sbDatosAdministradores.AppendFormat("Ciudad: {0}<br/>", perfil.Ciudad);
                        sbDatosAdministradores.AppendFormat("Pcia.: {0}<br/>", perfil.Provincia);
                        sbDatosAdministradores.AppendFormat("Pais: {0}<br/><br/>", perfil.Pais);
                    }

                    SendMailCliente(oVentaInfo, sbPedidoCliente.ToString(), sbDatosFotografos.ToString(), sbDatosAdministradores.ToString());
                    SendMailPorFotografo(oVentaInfo, fotografos);

                    lblMensaje.Text = "Su pedido ya ha sido enviado, pronto nos comunicaremos con usted, gracias por utilizar este servicio.";
                    
                    BindData();
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
            }
         
        }

        private void SendMailPorFotografo(VentaInfo oVentaInfo, List<string> fotografos)
        {
            foreach (string fotografo in fotografos)
            {
                StringBuilder sbPedidoCliente = new StringBuilder();
                int cant_ped = 0;

                foreach (VentaItemInfo oVentaItemInfo in VentaItem.GetAllByVentaIDFotografo(oVentaInfo.VentaID, fotografo))
                {
                    sbPedidoCliente.AppendFormat("{0} : {1}\r\n", oVentaItemInfo.Descripcion, oVentaItemInfo.Nombre);
                    cant_ped++;
                }

                oVentaInfo.Cantidad = cant_ped;
                SendMailPorFotografo(oVentaInfo, fotografo, sbPedidoCliente.ToString());
            }
        }

        private void SendMailPorFotografo(VentaInfo infoPedido, string userFotografo, string itemsPedido)
        {
            MembershipUser fotografo = Membership.GetUser(userFotografo);
            MembershipUser cliente = Membership.GetUser(infoPedido.Cliente);
            PerfilComun perfil_cliente = (PerfilComun)ProfileBase.Create(infoPedido.Cliente);
            MailMessage correo = new MailMessage();

            string TextoMail;
            string PathFile = MapPath("~/MailPedidoFotografo.txt");

            if(File.Exists(PathFile))
            {
                using(StreamReader sr = new StreamReader(File.Open(PathFile, FileMode.Open)))
                {
                    TextoMail = sr.ReadToEnd();
                }
            }
            else
	        {
                TextoMail = "<%UserFotografo%> ha recibido un pedido de <%User%>\r\n \r\n";
                
                TextoMail += "Datos del usuario\r\n";
                TextoMail += "-----------------\r\n";
                TextoMail += "Nombre y Apellido: <%Nombre%> <%Apellido%>";
                TextoMail += "Telefono: <%Telefono%>\r\n";
                TextoMail += "E-mail: <%email%>\r\n \r\n";  
                
                TextoMail += "Datos del pedido\r\n";
                TextoMail += "----------------\r\n";
                TextoMail += "Codigo de pedido: <%CodigoPedido%>\r\n";
                TextoMail += "Fecha: <%Fecha%>\r\n";
                TextoMail += "Cantidad: <%Cantidad%>\r\n \r\n";                              

                TextoMail += "Detalle del pedido\r\n";
                TextoMail += "------------------\r\n";
                TextoMail += "<%DatosPedido%>\r\n";
	        }

            TextoMail = TextoMail.Replace("<%UserFotografo%>", userFotografo);
            TextoMail = TextoMail.Replace("<%user%>", infoPedido.Cliente);

            TextoMail = TextoMail.Replace("<%Nombre%>", perfil_cliente.Nombre + "<br/>");
            TextoMail = TextoMail.Replace("<%Apellido%>", perfil_cliente.Apellido + "<br/>");
            TextoMail = TextoMail.Replace("<%Telefono%>", perfil_cliente.Telefono + "<br/>");
            TextoMail = TextoMail.Replace("<%Celular%>", perfil_cliente.Celular + "<br/>");
            TextoMail = TextoMail.Replace("<%Direccion%>", perfil_cliente.Direccion + "<br/>");
            TextoMail = TextoMail.Replace("<%Ciudad%>", perfil_cliente.Ciudad + "<br/>");
            TextoMail = TextoMail.Replace("<%Provincia%>", perfil_cliente.Provincia + "<br/>");
            TextoMail = TextoMail.Replace("<%Pais%>", perfil_cliente.Pais + "<br/>");
            TextoMail = TextoMail.Replace("<%email%>", cliente.Email + "<br/>");

            TextoMail = TextoMail.Replace("<%CodigoPedido%>", infoPedido.VentaID.ToString());
            TextoMail = TextoMail.Replace("<%Fecha%>", infoPedido.Fecha.ToString());
            TextoMail = TextoMail.Replace("<%Cantidad%>", infoPedido.Cantidad.ToString());

            TextoMail = TextoMail.Replace("<%DatosPedido%>", itemsPedido);            

            correo.To.Add(fotografo.Email);
            correo.Subject = "Click Social - Notificacion de pedido";
            correo.Body = TextoMail;
            correo.IsBodyHtml = true;
            correo.Priority = System.Net.Mail.MailPriority.Normal;

            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
            smtp.Send(correo);
        }

        private void SendMailCliente(VentaInfo infoPedido, string itemsPedido, string datosFotografos, string datosAdministradores)
        {
            MembershipUser cliente = Membership.GetUser(infoPedido.Cliente);
            MailMessage correo = new MailMessage();

            string TextoMail;
            string PathFile = MapPath("~/MailPedidoCliente.txt");

            if(File.Exists(PathFile))
            {
                using (StreamReader sr = new StreamReader(File.Open(PathFile, FileMode.Open)))
                {
                    TextoMail = sr.ReadToEnd(); 
                }
            }
            else
	        {
                TextoMail = "<%user%>, el siguiente pedido ya ha sido enviado.\r\n \r\n";

                TextoMail += "Datos del pedido\r\n";
                TextoMail += "----------------\r\n";
                TextoMail += "Codigo de pedido: <%CodigoPedido%>\r\n";
                TextoMail += "Fecha: <%Fecha%>\r\n";
                TextoMail += "Cantidad: <%Cantidad%>\r\n \r\n";  
              
                TextoMail += "Detalle del pedido\r\n";
                TextoMail += "------------------\r\n";
                TextoMail += "<%DatosPedido%>\r\n";
	        }

            TextoMail = TextoMail.Replace("<%user%>", infoPedido.Cliente);
            TextoMail = TextoMail.Replace("<%CodigoPedido%>", infoPedido.VentaID.ToString());
            TextoMail = TextoMail.Replace("<%Fecha%>", infoPedido.Fecha.ToString());
            TextoMail = TextoMail.Replace("<%Cantidad%>", infoPedido.Cantidad.ToString());
            TextoMail = TextoMail.Replace("<%DatosPedido%>", itemsPedido);
            TextoMail = TextoMail.Replace("<%DatosFotografo%>", datosFotografos);
            TextoMail = TextoMail.Replace("<%DatosAdministrador%>", datosAdministradores);

            correo.To.Add(cliente.Email);
            
            foreach(string user_host in Roles.GetUsersInRole(Global.RolesApp.Host))
            {
                MembershipUser user = Membership.GetUser(user_host);
                correo.Bcc.Add(user.Email);
            }
            
            correo.Subject = "Click Social - Notificacion de pedido";
            correo.Body = TextoMail;
            correo.IsBodyHtml = true;
            correo.Priority = System.Net.Mail.MailPriority.Normal;

            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
            smtp.Send(correo);
        }

        protected void lnkbtnContinuarCompra_Click(object sender, EventArgs e)
        {
            try
            {
                if (Session["items_compra"] != null)
                {
                    if (!User.Identity.IsAuthenticated)
                    {
                        lblMensaje.Text = "Debe estar registrado para terminar la compra.";
                        return;
                    }

                    List<CartItemExtend> items_compra = Session["items_compra"] as List<CartItemExtend>;
                    Cart carrito = Session["Carrito"] as Cart;

                    VentaInfo oVentaInfo = new VentaInfo();
                    oVentaInfo.Cliente = User.Identity.Name;
                    oVentaInfo.Monto = Total;
                    oVentaInfo.Fecha = DateTime.Now;
                    oVentaInfo.Estado = EstadoVenta.Pendiente;
                    oVentaInfo.Cantidad = items_compra.Count;

                    oVentaInfo = Ventas.Insert(oVentaInfo);

                    StringBuilder sbPedidoCliente = new StringBuilder();
                    List<string> fotografos = new List<string>();
                    string fotografo_actual = string.Empty;

                    foreach (CartItemExtend item in items_compra)
                    {
                        if (fotografo_actual != item.UserFotografo)
                        {
                            fotografos.Add(item.UserFotografo);
                            fotografo_actual = item.UserFotografo;
                        }

                        //sbPedidoCliente.AppendFormat("({0}/{1}): {2}\r\n", item.NombreFotografo, item.NombreEvento, item.Archivo);
                        sbPedidoCliente.AppendFormat("<img alt='' src='{0}/GetImage.aspx?archivo={1}&eventoid={2}&fotografo={3}&w={4}&h={5}' style='border: none;' /></a> Evento:{6} Fotografo:{7}<br/>", ConfigurationManager.AppSettings["RootVirtualPath"], item.Archivo, item.EventoID, item.UserFotografo, 80, 60, item.NombreEvento, item.NombreFotografo);
                        VentaItemInfo oVentaItemInfo = new VentaItemInfo();
                        oVentaItemInfo.Nombre = item.Archivo;
                        oVentaItemInfo.Descripcion = string.Format("{0}/{1}", item.NombreFotografo, item.NombreEvento);
                        oVentaItemInfo.Precio = item.Precio;
                        oVentaItemInfo.VentaID = oVentaInfo.VentaID;
                        oVentaItemInfo.EventoID = item.EventoID;
                        oVentaItemInfo.Fotografo = item.UserFotografo;
                        VentaItem.Insert(oVentaItemInfo);

                        int idx = carrito.CartItems.FindIndex(delegate(CartItem i) { return (i.Archivo == item.Archivo && i.EventoID == item.EventoID && i.Precio == item.Precio && i.TipoCart==item.TipoCart); });
                        carrito.CartItems.RemoveAt(idx);
                    }

                    if (carrito.CartItems.Count == 0)
                        Session["Carrito"] = null;
                    Session["items_compra"] = null;

                    StringBuilder sbDatosAdministradores = new StringBuilder();
                    StringBuilder sbDatosFotografos = new StringBuilder();

                    foreach (string fotografo in fotografos)
                    {
                        MembershipUser u = Membership.GetUser(fotografo);
                        PerfilComun perfil = (PerfilComun)ProfileBase.Create(fotografo);
                        sbDatosFotografos.AppendFormat("Nombre y Apellido: {0} {1}<br/>", perfil.Nombre, perfil.Apellido);
                        sbDatosFotografos.AppendFormat("Telefono: {0}<br/>", perfil.Telefono);
                        sbDatosFotografos.AppendFormat("Mobile: {0}<br/>", perfil.Celular);
                        sbDatosFotografos.AppendFormat("E-mail: {0}<br/>", u.Email);
                        sbDatosFotografos.AppendFormat("Direccion: {0}<br/>", perfil.Direccion);
                        sbDatosFotografos.AppendFormat("Ciudad: {0}<br/>", perfil.Ciudad);
                        sbDatosFotografos.AppendFormat("Pcia.: {0}<br/>", perfil.Provincia);
                        sbDatosFotografos.AppendFormat("Pais: {0}<br/>", perfil.Pais);
                    }

                    foreach (string userHost in Roles.GetUsersInRole(Global.RolesApp.Host))
                    {
                        MembershipUser u = Membership.GetUser(userHost);
                        PerfilComun perfil = (PerfilComun)ProfileBase.Create(userHost);
                        sbDatosAdministradores.AppendFormat("Nombre y Apellido: {0} {1}<br/>", perfil.Nombre, perfil.Apellido);
                        sbDatosAdministradores.AppendFormat("Telefono: {0}<br/>", perfil.Telefono);
                        sbDatosAdministradores.AppendFormat("Mobile: {0}<br/>", perfil.Celular);
                        sbDatosAdministradores.AppendFormat("E-mail: {0}<br/>", u.Email);
                        sbDatosAdministradores.AppendFormat("Direccion: {0}<br/>", perfil.Direccion);
                        sbDatosAdministradores.AppendFormat("Ciudad: {0}<br/>", perfil.Ciudad);
                        sbDatosAdministradores.AppendFormat("Pcia.: {0}<br/>", perfil.Provincia);
                        sbDatosAdministradores.AppendFormat("Pais: {0}<br/><br/>", perfil.Pais);
                    }

                    SendMailCompraCliente(oVentaInfo, sbPedidoCliente.ToString(), sbDatosFotografos.ToString(), sbDatosAdministradores.ToString());
                    SendMailCompraPorFotografo(oVentaInfo, fotografos);

                    //lblMensaje.Text = "Su pedido ya ha sido enviado, pronto nos comunicaremos con usted, gracias por utilizar este servicio.";

                    BindData();
                }

            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;                
            }

            Response.Redirect(rdlMedioPago.SelectedValue);
        }

        private void SendMailCompraPorFotografo(VentaInfo oVentaInfo, List<string> fotografos)
        {
            foreach (string fotografo in fotografos)
            {
                StringBuilder sbPedidoCliente = new StringBuilder();
                int cant_ped = 0;

                foreach (VentaItemInfo oVentaItemInfo in VentaItem.GetAllByVentaIDFotografo(oVentaInfo.VentaID, fotografo))
                {
                    sbPedidoCliente.AppendFormat("{0} : {1}\r\n", oVentaItemInfo.Descripcion, oVentaItemInfo.Nombre);
                    cant_ped++;
                }

                oVentaInfo.Cantidad = cant_ped;
                SendMailCompraPorFotografo(oVentaInfo, fotografo, sbPedidoCliente.ToString());
            }
        }

        private void SendMailCompraPorFotografo(VentaInfo infoPedido, string userFotografo, string itemsPedido)
        {
            MembershipUser fotografo = Membership.GetUser(userFotografo);
            MembershipUser cliente = Membership.GetUser(infoPedido.Cliente);
            PerfilComun perfil_cliente = (PerfilComun)ProfileBase.Create(infoPedido.Cliente);
            MailMessage correo = new MailMessage();

            string TextoMail;
            string PathFile = MapPath("~/MailCompraFotografo.txt");

            if (File.Exists(PathFile))
            {
                using (StreamReader sr = new StreamReader(File.Open(PathFile, FileMode.Open)))
                {
                    TextoMail = sr.ReadToEnd();
                }
            }
            else
            {
                TextoMail = "<%UserFotografo%> ha recibido una compra<%User%>\r\n \r\n";

                TextoMail += "Datos del usuario\r\n";
                TextoMail += "-----------------\r\n";
                TextoMail += "Nombre y Apellido: <%Nombre%> <%Apellido%>";
                TextoMail += "Telefono: <%Telefono%>\r\n";
                TextoMail += "E-mail: <%email%>\r\n \r\n";

                TextoMail += "Datos de la compra\r\n";
                TextoMail += "----------------\r\n";
                TextoMail += "Codigo de la compra: <%CodigoPedido%>\r\n";
                TextoMail += "Fecha: <%Fecha%>\r\n";
                TextoMail += "Cantidad: <%Cantidad%>\r\n \r\n";

                TextoMail += "Detalle de la compra\r\n";
                TextoMail += "------------------\r\n";
                TextoMail += "<%DatosPedido%>\r\n";
            }

            TextoMail = TextoMail.Replace("<%UserFotografo%>", userFotografo);
            TextoMail = TextoMail.Replace("<%user%>", infoPedido.Cliente);

            TextoMail = TextoMail.Replace("<%Nombre%>", perfil_cliente.Nombre+"<br/>");
            TextoMail = TextoMail.Replace("<%Apellido%>", perfil_cliente.Apellido + "<br/>");
            TextoMail = TextoMail.Replace("<%Telefono%>", perfil_cliente.Telefono + "<br/>");
            TextoMail = TextoMail.Replace("<%Celular%>", perfil_cliente.Celular + "<br/>");
            TextoMail = TextoMail.Replace("<%Direccion%>", perfil_cliente.Direccion + "<br/>");
            TextoMail = TextoMail.Replace("<%Ciudad%>", perfil_cliente.Ciudad + "<br/>");
            TextoMail = TextoMail.Replace("<%Provincia%>", perfil_cliente.Provincia + "<br/>");
            TextoMail = TextoMail.Replace("<%Pais%>", perfil_cliente.Pais + "<br/>");
            TextoMail = TextoMail.Replace("<%email%>", cliente.Email + "<br/>");

            TextoMail = TextoMail.Replace("<%CodigoPedido%>", infoPedido.VentaID.ToString());
            TextoMail = TextoMail.Replace("<%Fecha%>", infoPedido.Fecha.ToString());
            TextoMail = TextoMail.Replace("<%Cantidad%>", infoPedido.Cantidad.ToString());

            TextoMail = TextoMail.Replace("<%DatosPedido%>", itemsPedido);

            correo.To.Add(fotografo.Email);
            correo.Subject = "Click Social - Notificacion de Compra";
            correo.Body = TextoMail;
            correo.IsBodyHtml = true;
            correo.Priority = System.Net.Mail.MailPriority.Normal;

            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
            smtp.Send(correo);
        }

        private void    SendMailCompraCliente(VentaInfo infoPedido, string itemsPedido, string datosFotografos, string datosAdministradores)
        {
            MembershipUser cliente = Membership.GetUser(infoPedido.Cliente);
            MailMessage correo = new MailMessage();

            string TextoMail;
            string PathFile = MapPath("~/MailCompraCliente.txt");

            if (File.Exists(PathFile))
            {
                using (StreamReader sr = new StreamReader(File.Open(PathFile, FileMode.Open)))
                {
                    TextoMail = sr.ReadToEnd();
                }
            }
            else
            {
                TextoMail = "<%user%>, la siguiente compra ya ha sido enviada.\r\n \r\n";

                TextoMail += "Datos de la compra\r\n";
                TextoMail += "----------------\r\n";
                TextoMail += "Codigo de la Compra: <%CodigoPedido%>\r\n";
                TextoMail += "Fecha: <%Fecha%>\r\n";
                TextoMail += "Cantidad: <%Cantidad%>\r\n \r\n";

                TextoMail += "Detalle de la Compra\r\n";
                TextoMail += "------------------\r\n";
                TextoMail += "<%DatosPedido%>\r\n";
            }

            TextoMail = TextoMail.Replace("<%user%>", infoPedido.Cliente);
            TextoMail = TextoMail.Replace("<%CodigoPedido%>", infoPedido.VentaID.ToString());
            TextoMail = TextoMail.Replace("<%Fecha%>", infoPedido.Fecha.ToString());
            TextoMail = TextoMail.Replace("<%Cantidad%>", infoPedido.Cantidad.ToString());
            TextoMail = TextoMail.Replace("<%DatosPedido%>", itemsPedido);
            TextoMail = TextoMail.Replace("<%DatosFotografo%>", datosFotografos);
            TextoMail = TextoMail.Replace("<%DatosAdministrador%>", datosAdministradores);

            correo.To.Add(cliente.Email);

            foreach (string user_host in Roles.GetUsersInRole(Global.RolesApp.Host))
            {
                MembershipUser user = Membership.GetUser(user_host);
                correo.Bcc.Add(user.Email);
            }

            correo.Subject = "Click Social - Notificacion de Compra";
            correo.Body = TextoMail;
            correo.IsBodyHtml = true;
            correo.Priority = System.Net.Mail.MailPriority.Normal;

            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
            smtp.Send(correo);
        }

    }

    public class CartItemExtend : CartItem, IComparable
    {
        #region Campos
        private EventoInfo _EventoInfo;
        private string _NombreEvento;
        private string _UserFotografo;
        private string _NombreFotografo;
        #endregion

        #region Propiedades
        public string NombreFotografo
        {
            get { return _NombreFotografo; }
            set { _NombreFotografo = value; }
        }
        public string NombreEvento
        {
            get
            {
                return _NombreEvento;
            }
            set
            {
                _NombreEvento = value;
            }

        }
        public string UserFotografo
        {
            get { return _UserFotografo; }
            set { _UserFotografo = value; }
        }
        #endregion

        public CartItemExtend(long eventoId, string archivo, double precio, int tipoCart)
            : base(eventoId, archivo, precio, tipoCart)
        {
            _EventoInfo = Evento.GetOne(eventoId);
            _NombreEvento = _EventoInfo.Nombre;
            _UserFotografo = _EventoInfo.Fotografo;
            _NombreFotografo = _EventoInfo.NombreFotografo;
        }

        #region IComparable Members

        public int CompareTo(object obj)
        {
            return _UserFotografo.CompareTo(((CartItemExtend)obj).UserFotografo);
        }

        #endregion
    }
    
}
